	let EIYA = 7;
	let KAEI = 8;
	let HUJIN = 9;
	let TIREI = 10;
	let EX = 11;

	task Cut_In(let spell_type, let text, let cutin_img, let l, let t, let r, let b) {
		SetText(text);
		LoadGraphic(cutin_img);
		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, cutin_img);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetLayer(obj, 7);
		let wh = [l ,t, r, b];
		let xy = Cal_XY(wh[0], wh[1], wh[2], wh[3]);
		let uv = Cal_UV(wh[0], wh[1], wh[2], wh[3]);
		ascent (i in 0..4) {
			ObjEffect_SetVertexXY(obj, i, xy[i], xy[i + 4]);
			ObjEffect_SetVertexUV(obj, i, uv[i], uv[i + 4]);
		}
		if (spell_type == KOUMA) {
			let start_x = GetClipMaxX + (absolute(r - l) / 2);
			let end_x = GetClipMaxX - (absolute(r - l) / 2) - 15;
			let move_x = (end_x - start_x) / 40;
			Obj_SetPosition(obj, start_x, GetCenterY);
			let al = 255 / 40;
			ascent (i in 0..40) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, i * al, 255, 255, 255);
				}
				Obj_SetPosition(obj, start_x + move_x * i, GetCenterY);
				W_CI(1);
			}
			W_CI(40 * 1.5);
			ascent (i in 0..40) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, 255 - (i * al), 255, 255, 255);
				}
				ObjEffect_SetScale(obj, 1 + i * (2 / 40), 1 + i * (2 / 40));
				W_CI(1);
			}
		}
		if (spell_type == YOUMU) {
			let x = absolute(r - l) / 2;
			let start_y = GetCenterY - 125;
			let end_y = GetCenterY + 125;
			let move_y = (end_y - start_y) / (40 * 3);
			let get_y;
			Obj_SetPosition(obj, GetClipMaxX - 5 - x, start_y);
			let al = 255 / 40;
			ascent (i in 0..40 * 1.5) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, i * al, 255, 255, 255);
				}
				Obj_SetPosition(obj, GetClipMaxX - 5 - x, start_y + move_y * (i * 0.75));
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent(i in 0..40 * 1.5) {
				Obj_SetPosition(obj, GetClipMaxX - 5 - x, get_y + move_y * (i * 0.75));
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent (i in 0..40 * 1.5) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, 255 - (i * al), 255, 255, 255);
				}
				Obj_SetPosition(obj, GetClipMaxX - 5 - x, get_y + move_y * (i * 0.75));
				W_CI(1);
			}
		}
		if (spell_type == EIYA) {
			let start_y = GetCenterY - 50;
			let end_y = GetCenterY + 50;
			let move_y = (end_y - start_y) / (40 * 3);
			let get_y;
			Obj_SetPosition(obj, GetCenterX, start_y);
			let al = 255 / (40 * 1.5);
			ascent (i in 0..40 * 1.5) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, i * al, 255, 255, 255);
				}
				Obj_SetPosition(obj, GetCenterX, start_y + move_y * i);
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent(i in 0..40 * 1.5) {
				Obj_SetPosition(obj, GetCenterX, get_y + move_y * i);
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent (i in 0..40 * 1.5) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, 255 - (i * al), 255, 255, 255);
				}
				Obj_SetPosition(obj, GetCenterX, get_y + move_y * i);
				W_CI(1);
			}
		}
		if (spell_type == KAEI) {
			let x = absolute((r - l) / 2);
			let y = absolute((b - t) / 2);
			xy = [-x, x, x, -x, -y, -y, y, y];
			uv = [wh[0], wh[2], wh[2], wh[0], wh[1], wh[1], wh[3], wh[3]];
			ascent (i in 0..4) {
				ObjEffect_SetVertexXY(obj, i, xy[i], xy[i + 4]);
				ObjEffect_SetVertexUV(obj, i, uv[i], uv[i + 4]);
			}
			Obj_SetPosition(obj, GetCenterX, GetCenterY);
			let change_scale = 1 / (40 * 0.22);
			ascent(i in 0..40 * 0.25) {
				ObjEffect_SetScale(obj, 1, 0 + change_scale * i);
				W_CI(1);
			}
			loop (40 * 2.5) {
				W_CI(1);
			}
			descent(i in 0..40 * 0.25) {
				ObjEffect_SetScale(obj, 1, 0 + change_scale * i);
				W_CI(1);
			}
		}
		if (spell_type == HUJIN) {
			let start_y = GetCenterY + 150;
			let end_y = GetCenterY - 50;
			let move_y = (end_y - start_y) / (40 * 3);
			let get_y;
			Obj_SetPosition(obj, GetCenterX + 50, start_y);
			let al = 255 / 40;
			ascent (i in 0..40) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, i * al, 255, 255, 255);
				}
				if (i < 40 / 2) {
					Obj_SetPosition(obj, GetCenterX + 50, Obj_GetY(obj) + move_y * 0.5);
				} else {
					Obj_SetPosition(obj, GetCenterX + 50, Obj_GetY(obj) + move_y * 1.5);
				}
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent(i in 0..40) {
				Obj_SetPosition(obj, GetCenterX + 50, get_y + move_y * (i * 1.5));
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent (i in 0..40) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, 255 - (i * al), 255, 255, 255);
				}
				if (i < 40 / 4) {
					Obj_SetPosition(obj, GetCenterX + 50, Obj_GetY(obj) + move_y * 1.5);
				} else {
					Obj_SetPosition(obj, GetCenterX + 50, Obj_GetY(obj) + move_y * 0.5);
				}
				W_CI(1);
			}
		}
		if (spell_type == TIREI) {
			let set_x = GetClipMaxX + ((r - l) / 2);
			let set_y = GetClipMinY - ((b - t) / 2);
			let set_radius = (absolute(GetCenterX - set_x) ^ 2 + absolute(GetCenterY - set_y) ^ 2) ^ 0.5;
			let start_x = GetCenterX + set_radius * cos(-20);
			let start_y = GetCenterY + set_radius * sin(-20);
			Obj_SetPosition(obj, start_x, start_y);
			Obj_SetAngle(obj, atan2(GetCenterY - start_y, GetCenterX - start_x));
			Obj_SetSpeed(obj, ((absolute(GetCenterX - start_x) ^ 2 + absolute(GetCenterY - start_y) ^ 2) ^ 0.5) / 40);
			let al = 255 / (40 * 0.95);
			ascent (i in 0..40 * 0.95) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, i * al, 255, 255, 255);
				}
				W_CI(1);
			}
			ascent(i in 0..40 * 1.5) {
				Obj_SetSpeed(obj, 0.5);
				W_CI(1);
			}
			ascent(i in 0..40) {
				Obj_SetSpeed(obj, 0 + i * 0.5);
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, 355 - (i * al), 255, 255, 255);
				}
				W_CI(1);
			}
		}
		if (spell_type == EX) {
			let start_y = GetCenterY + 150;
			let end_y = GetCenterY - 50;
			let move_y = (end_y - start_y) / (60 * 3);
			let get_y;
			Obj_SetPosition(obj, GetCenterX, start_y);
			let al = 255 / 60;
			ascent (i in 0..60) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, i * al, 255, 255, 255);
				}
				if (i < 60 / 2) {
					Obj_SetPosition(obj, GetCenterX, Obj_GetY(obj) + move_y * 0.5);
				} else {
					Obj_SetPosition(obj, GetCenterX, Obj_GetY(obj) + move_y * 1.5);
				}
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent(i in 0..90) {
				Obj_SetPosition(obj, GetCenterX, get_y + move_y * (i * 1.5));
				W_CI(1);
			}
			get_y = Obj_GetY(obj);
			ascent (i in 0..60) {;
				ascent(j in 0..4) {
					ObjEffect_SetVertexColor(obj, j, 255 - (i * al), 255, 255, 255);
				}
				if (i < 60 / 4) {
					Obj_SetPosition(obj, GetCenterX, Obj_GetY(obj) + move_y * 1.5);
				} else {
					Obj_SetPosition(obj, GetCenterX, Obj_GetY(obj) + move_y * 0.5);
				}
				W_CI(1);
			}
		}
		Obj_Delete(obj);
	}

	function W_CI(wait){loop(wait){yield;}}
	function Cal_XY(let wh_0, let wh_1, let wh_2, let wh_3){
		let xy=[-(wh_2-wh_0)/2,(wh_2-wh_0)/2,(wh_2-wh_0)/2,-(wh_2-wh_0)/2,-(wh_3-wh_1)/2,-(wh_3-wh_1)/2,(wh_3-wh_1)/2,(wh_3-wh_1)/2];
		return xy;
	}
	function Cal_UV(let wh_0, let wh_1, let wh_2, let wh_3){
		let uv=[wh_0,wh_2,wh_2,wh_0,wh_1,wh_1,wh_3,wh_3];
		return uv;
	}